Today's computing devices have access to a variety of visual content. To enable visual content to be displayed, visual content is typically processed in various ways prior to being displayed. For example, graphics data is typically converted from complex geometries into simpler geometric primitives that can be processed and displayed as part of more complex images.
One such technique for converting geometries into simpler primitives is known as tessellation. Generally, tessellation involves converting a complex shape into a group of simple polygons (e.g., triangles) that can be processed and displayed. While tessellation is useful for rendering high-quality graphics, it is also associated with significant computing resource costs.
A common approach to mitigate the resource cost of tessellation is to separate graphics rendering out into two passes. A first pass is known as a “realization” pass that converts a geometry into an intermediate form (called a “realization”) that is cached, such as on a central processing unit (“CPU”) and/or on a graphics processing unit (“GPU”). A second pass is known as a “draw” pass that takes the cached realization along with a transform and a “brush” (e.g., a mapping from pixel positions to color values) and renders a primitive. Thus, the expensive CPU cost of tessellation can be incurred once, while the primitive itself can be rendered multiple times with varying transforms and brushes to reduce CPU overhead.
While current techniques may utilize this two-pass approach to rendering primitives, such techniques suffer from a number of drawbacks. For example, some techniques employ multi-sample-based anti-aliasing that can significantly increase GPU costs and thus affect overall rendering performance. Moreover, such techniques are not typically supported on many current GPUs. Other techniques may rasterize a geometry to generate a coverage bitmap that is used as an opacity mask to which a brush can be applied to render graphics. These techniques may suffer from distortion when a coverage bitmap is scaled, and may also increase GPU memory costs significantly for larger geometries.